package com.own.exception;

import com.own.base.BaseResponseCode;
import lombok.AllArgsConstructor;

/**
 * ExceptionEnum
 *
 * @author chenxueli
 * @date 2024-03-12 09:24:00
 */
public class ExceptionEnum {

    /**
     * 默认的异常字符
     */
    @AllArgsConstructor
    public enum Default implements BaseResponseCode {
        DEFAULT("E0000", "系统处理异常"),
        AUTO_LOGIN_NOT_FOUND("S0010", "未查询到自动登录的信息"),
        ;
        // region 通用字段
        private final String code;

        private final String desc;

        @Override
        public String code() {
            return this.code;
        }

        @Override
        public String desc() {
            return this.desc;
        }
        // endregion
    }

    /**
     * 系统方面的异常字符
     */
    @AllArgsConstructor
    public enum System implements BaseResponseCode {
        ;
        // region 通用字段
        private final String code;

        private final String desc;

        @Override
        public String code() {
            return this.code;
        }

        @Override
        public String desc() {
            return this.desc;
        }
        // endregion
    }

    /**
     * 登录方面的异常字符
     */
    @AllArgsConstructor
    public enum Login implements BaseResponseCode {

        PASSWORD_BLANK("L0001", "密码不能为空"),

        USER_NOT_FOUND("L0002", "当前用" +
                "户未注册！"),
        PASSWORD_ERROR("L0003", "用户名或密码错误！"),
        ACCOUNT_BAN("L0004", "账号已被禁用"),
        PASSWORD_ERROR_BEFORE_LOGIN("L0005", "当前用户未注册！"),

        NOT_LOGIN("L0006", "您还没有登录，请登录后再试"),
        NOT_DEFINED("L0007", "未实现登录接口"),
        TOKEN_ERROR("L0008", "token机制错误，请联系管理员"),
        ACCOUNT_FREEZE("L0009", "账号已经被冻结，冻结时间于%s结束"),
        ACCOUNT_AUDIT("L00010", "账号正在审核中"),
        SYSTEM_IP_NOT_ALLOWED("L0011", "系统设置了访问ip限制，当前网络无法访问"),
        SECURITY_IP_NOT_ALLOWED("L0012", "账号设置了访问ip限制，当前网络无法访问"),
        ACCOUNT_NOT_ALLOWED("L0013", "账号设置了登录限制，无法通过账号密码访问"),
        PHONE_NOT_ALLOWED("L0014", "账号设置了登录限制，无法通过手机号密码访问"),
        EMAIL_NOT_ALLOWED("L0015", "账号设置了登录限制，无法通过邮箱号密码访问"),
        USER_NAME_NOT_ALLOWED("L0016", "账号设置了登录限制，无法通过用户名称密码访问"),
        PASSWORD_NOT_ALLOWED("L0017", "账号设置了登录限制，无法通过密码访问"),
        SMS_NOT_ALLOWED("L0018", "账号设置了登录限制，无法通过手机验证码访问"),
        CLIENT_ERROR("L0019", "该账号无法访问当前客户端，请使用其他方式访问"),

        AUTO_LOGIN_CLIENT_DIFFERENT("L0020", "自动登录的客户端不一致"),
        AUTO_LOGIN_TOKEN_NOT_EFFECTIVE("L0021", "自动登录的token未到使用的时间"),
        AUTO_LOGIN_NOT_FOUND("L0022", "未查询到自动登录的信息"),
        AUTO_LOGIN_IS_EXPIRE("L0023", "自动登录的token已经过期"),
        AUTO_LOGIN_NOT_EXIST("L0024", "自动登录的token不存在"),
        ;

        // region 通用字段
        private final String code;

        private final String desc;

        @Override
        public String code() {
            return this.code;
        }

        @Override
        public String desc() {
            return this.desc;
        }
        // endregion
    }

    /**
     * 表单方面的异常字符
     */
    @AllArgsConstructor
    public enum Form implements BaseResponseCode {

        PASSWORD_BLANK("F0001", "密码不能为空"),
        ACCOUNT_NOT_FOUND("F0002", "账号不存在"),

        ;

        // region 通用字段
        private final String code;

        private final String desc;

        @Override
        public String code() {
            return this.code;
        }

        @Override
        public String desc() {
            return this.desc;
        }
        // endregion
    }

    /**
     * 资源方面的异常字符
     */
    @AllArgsConstructor
    public enum Resource implements BaseResponseCode {

        DEFAULT("resource_error", "文件资源异常"),
        FILE_NOT_EXIST("file_not_exist", "文件不存在"),
        CONVERT_CALLBACK_ERROR("convert_callback_error", "文件访问异常"),
        CONVERT_WAIT("convert_wait", "文件正在等待转换，请稍后再访问"),
        INPUT_STREAM_WRROR("input_stream_wrror", "获取文件流错误，请重试"),
        INPUT_STREAM_NOT_SUPPORT("input_stream_not_support", "不支持文件流形式信息"),
        CONVERTING("converting", "文件正在转换中，请稍后访问"),
        CONVERT_ERROR("convert_error", "文件转换错误，请联系进行更换资源文件"),
        FILE_STATUS_ERROR("file_status_error", "文件状态错误，请联系进行更换资源文件"),
        SIGNATURE_UNDEFINED("signature_undefined", "未定义上传签名的内容"),
        TEMPORARY_ACCESS_PATH_UNDEFINED("temporary_access_path_undefined", "未定义临时访问路径的内容"),
        ;

        // region 通用字段
        private final String code;

        private final String desc;

        @Override
        public String code() {
            return this.code;
        }

        @Override
        public String desc() {
            return this.desc;
        }
        // endregion

    }

}
